package models

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

/*
* 数据表结构包括
* column: 设置列的名称
* type(len): 设置列的类型和长度, 小数点长度：type:decimal(10,2)
*  not null: 表示不允许为null
* comment: 注释
* default: 默认值
* index: 索引，sort: 排序规则，`gorm:"index:idx_phone,sort:desc"`
 */

/*
* 键：primary_key， 唯一值uniqueIndex
 */

/*
* 数字类型：
* unsigned: 无符号
* auto_increment 自增，只能有一个自增
* UserID uint32 `gorm:"primary_key;type:int(11) unsigned auto_increment;"`
 */

/*
* gorm 默认字段
* ID: 自增主键
* createdAt: 创建时间
* updatedAt: 更新时间
 */

// InitTable 初始化数据库
func InitTable(db *gorm.DB) {
	db.AutoMigrate(new(User))
	db.AutoMigrate(new(Role))
	db.AutoMigrate(new(Menu))
}

//InitDB 初始化mysql 连接
func InitDB() (*gorm.DB, error) {
	dsn := "root@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	mysqlD := mysql.New(mysql.Config{
		DSN:               dsn, // dsn 连接数据库
		DefaultStringSize: 255, //为string 类型添加默认长度，不然默认使用longtext 类型解析string 类型字段
	})

	//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db, err := gorm.Open(mysqlD, &gorm.Config{})
	return db, err
}

var MysqlDB *gorm.DB

func init() {
	db, error := InitDB()
	if error != nil {
		fmt.Println("db error:", error)
		return
	}
	MysqlDB = db
}

//JSONResult 统一返回格式
type JSONResult struct {
	//返回值
	Code int `json:"code"`
	//消息
	Msg string `json:"msg"`
	// 具体数据
	Data interface{} `json:"data"`
}

//JSONList 统一数据列表的返回格式
type JSONList struct {
	//记录条数
	Count int `json:"count"`
	//列表数据
	List interface{} `json:"list"`
}
